package com.yh.blog.mapper;

import com.yh.blog.domain.Blog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 博客数据访问层
 */
@Mapper
public interface BlogMapper {

    /**
     * 新增博客
     * @param blog 博客对象
     * @return 布尔值
     */
    public boolean insert(Blog blog);

    /**
     * 删除博客
     * @param blogId 博客id
     * @return 布尔值
     */
    public boolean delete(Integer blogId);

    /**
     * 修改博客
     * @param blog 博客对象
     * @return 布尔值
     */
    public boolean update(Blog blog);

    /**
     * 根据id查询博客
     * @param blogId 博客id
     * @return 博客对象
     */
    public Blog selectById(Integer blogId);

    /**
     * 动态查询博客列表
     * @param condition 查询条件
     * @param skip 跳过记录数
     * @param take 一页显示几条数据
     * @return 博客对象的集合
     */
    public List<Blog> selectByCondition(@Param("condition") Blog condition,@Param("skip") Integer skip,@Param("take") Integer take);

    /** 注意这是个坑你以为他只有一个参数不需要@Param？错因为我们要在.xml中模糊查询所以我们要填上这个注解
     * 动态查询博客列表条数
     * @param condition 查询条件
     * @return 博客数量
     */
    public int sizeByCondition(@Param("condition") Blog condition);

    /**
     * 搜索推荐的博客
     * @return 推荐博客对象集合
     */
    public List<Blog> selectRecommendBlog();

    /**
     * 查询博客总数
     * @return 发布的博客数
     */
    public int getTotalBlog();

    /**
     * 查询访问总数
     * @return 数值
     */
    public int getTotalViews();

    /**
     * 查询评论总数
     * @return 数值
     */
    public int getTotalComments();

    /**
     * 查询留言总数
     * @return 数值
     */
    public int getTotalMessages();

    /**
     * 查询搜索博客
     * @param searchText 搜索域文本
     * @param skip 跳过记录数
     * @param take 页容量
     * @return 博客对象集合
     */
    public List<Blog> searchBlog(@Param("searchText") String searchText,@Param("skip") Integer skip,@Param("take") Integer take);
}
